www.gusucode.com > (粗糙集数据分析工具箱) matlab源码程序 > matlab代做 修改 程序工具箱 (粗糙集数据分析工具箱) matla 中使用/rsda/redu.m
function y=redu(c,d,x)% y=core(c,d,x); q=ind(d,x); p=ind(c,x); pos_cd=pospq(p,q); re=y; red=ind(y,x); pos_red=pospq(red,q); while pos_cd~=pos_red cc=setdiff(c,re); [c1,c2]=size(cc); for i=1:c2, yy(i)=sgf(cc(i),re,d,x); end cd=setdiff(c,y); [d1,d2]=size(cd); for i=d2:-1:c2+1, yy(i)=[]; end [zz,ii]=sort(yy); for v1=c2:-1:1 v2=ii(v1); re=cat(2,re,cc(v2)); red=ind(re,x); pos_red=pospq(red,q); end end [re1,re2]=size(re); for qi=re2:-1:1 if ismember(re(qi),core(c,d,x)), y=re; break; end re=setdiff(re,re(qi)); red=ind(re,x); pos_red=pospq(red,q); if pos_cd==pos_red, y=re; end end [y1,y2]=size(y); j=1; for i=1:y2, [y,j]=redu2(j,y,c,d,x); end function [y,j]=redu2(i,re,c,d,x)%i index,re reduce yre=re; [re1,re2]=size(re); q=ind(d,x); p=ind(c,x); pos_cd=pospq(p,q); for qi=i:re2 re=setdiff(re,re(qi)); red=ind(re,x); pos_red=pospq(red,q); if pos_cd==pos_red y=re; j=i; break else y=yre; j=i+1; break end end